{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import numpy as np"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = pd.read_csv('./tt/train.csv')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',\n",
       "       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],\n",
       "      dtype='object')"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.columns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data = data[['Survived', 'Pclass','Sex', 'Age', 'SibSp','Parch', 'Fare', 'Cabin', 'Embarked']]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data['Age'] = data['Age'].fillna(data['Age'].mean())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data['Cabin'] = pd.factorize(data.Cabin)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data.fillna(0,inplace = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data['Sex'] = [1 if x=='male' else 0 for x in data.Sex]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data['p1'] = np.array(data['Pclass'] ==1).astype(np.int32)\n",
    "data['p2'] = np.array(data['Pclass'] ==2).astype(np.int32)\n",
    "data['p3'] = np.array(data['Pclass'] ==3).astype(np.int32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "del data['Pclass']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array(['S', 'C', 'Q', 0], dtype=object)"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.Embarked.unique()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data['e1'] = np.array(data['Embarked'] =='S').astype(np.int32)\n",
    "data['e2'] = np.array(data['Embarked'] =='C').astype(np.int32)\n",
    "data['e3'] = np.array(data['Embarked'] =='Q').astype(np.int32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "del data['Embarked']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dtype('float64')"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data.values.dtype"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data_train = data[['Sex', 'Age', 'SibSp', 'Parch', 'Fare','Cabin', 'p1', 'p2', 'p3', 'e1', 'e2', 'e3']].values"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data_target = data['Survived'].values.reshape(len(data),1)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "((891, 12), (891, 1))"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "np.shape(data_train), np.shape(data_target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import tensorflow as tf"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "x = tf.placeholder(\"float\", shape=[None,12])\n",
    "y = tf.placeholder(\"float\", shape=[None,1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "weight = tf.Variable(tf.random_normal([12,1]))\n",
    "bias = tf.Variable(tf.random_normal([1]))\n",
    "output = tf.matmul(x,weight) + bias\n",
    "pred = tf.cast(tf.sigmoid(output)>0.5,tf.float32)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "loss = tf.reduce_mean(tf.nn.sigmoid_cross_entropy_with_logits(labels = y,logits = output))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "train_step = tf.train.GradientDescentOptimizer(0.0003).minimize(loss)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "accuracy = tf.reduce_mean(tf.cast(tf.equal(pred,y), tf.float32))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "data_test = pd.read_csv('./tt/test.csv')\n",
    "data_test = data_test[['Pclass','Sex', 'Age', 'SibSp','Parch', 'Fare', 'Cabin', 'Embarked']]\n",
    "data_test['Age'] = data_test['Age'].fillna(data_test['Age'].mean())\n",
    "data_test['Cabin'] = pd.factorize(data_test.Cabin)[0]\n",
    "data_test.fillna(0,inplace = True)\n",
    "data_test['Sex'] = [1 if x=='male' else 0 for x in data_test.Sex]\n",
    "data_test['p1'] = np.array(data_test['Pclass'] ==1).astype(np.int32)\n",
    "data_test['p2'] = np.array(data_test['Pclass'] ==2).astype(np.int32)\n",
    "data_test['p3'] = np.array(data_test['Pclass'] ==3).astype(np.int32)\n",
    "data_test['e1'] = np.array(data_test['Embarked'] =='S').astype(np.int32)\n",
    "data_test['e2'] = np.array(data_test['Embarked'] =='C').astype(np.int32)\n",
    "data_test['e3'] = np.array(data_test['Embarked'] =='Q').astype(np.int32)\n",
    "del data_test['Pclass']\n",
    "del data_test['Embarked']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "test_lable = pd.read_csv('./tt/gender.csv')\n",
    "test_lable = np.reshape(test_lable.Survived.values.astype(np.float32),(418,1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "sess = tf.Session()\n",
    "sess.run(tf.global_variables_initializer())\n",
    "loss_train = []\n",
    "train_acc = []\n",
    "test_acc = []"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10.4734 0.461538 0.4689\n",
      "0.919923 0.604396 0.62201\n",
      "0.669982 0.659341 0.703349\n",
      "0.612817 0.692308 0.73445\n",
      "0.523311 0.758242 0.755981\n",
      "0.472631 0.791209 0.779904\n",
      "0.548425 0.67033 0.796651\n",
      "0.481128 0.769231 0.842105\n",
      "0.477312 0.758242 0.861244\n",
      "0.550541 0.736264 0.870813\n",
      "0.498371 0.802198 0.885167\n",
      "0.552826 0.747253 0.897129\n",
      "0.469739 0.802198 0.906699\n",
      "0.507218 0.736264 0.909091\n",
      "0.545245 0.725275 0.91866\n",
      "0.374505 0.868132 0.923445\n",
      "0.554717 0.78022 0.92823\n",
      "0.537423 0.758242 0.92823\n",
      "0.392895 0.846154 0.940191\n",
      "0.424706 0.846154 0.940191\n",
      "0.48144 0.802198 0.940191\n",
      "0.481723 0.791209 0.944976\n",
      "0.454727 0.824176 0.944976\n",
      "0.456332 0.802198 0.947368\n",
      "0.440999 0.846154 0.947368\n"
     ]
    }
   ],
   "source": [
    "for i in range(25000):\n",
    "    index = np.random.permutation(len(data_target))\n",
    "    data_train = data_train.iloc[index]\n",
    "    data_target = data_target.iloc[index]\n",
    "    for n in range(len(data_target)//100 + 1):\n",
    "        batch_xs = data_train[n*100:n*100 + 100]\n",
    "        batch_ys = data_target[n*100:n*100 + 100]\n",
    "        sess.run(train_step,feed_dict={x: batch_xs, y: batch_ys})\n",
    "    if i%1000 == 0:\n",
    "        loss_temp = sess.run(loss, feed_dict={x: batch_xs, y: batch_ys})\n",
    "        loss_train.append(loss_temp)\n",
    "        train_acc_temp = sess.run(accuracy, feed_dict={x: batch_xs, y: batch_ys})\n",
    "        train_acc.append(train_acc_temp)\n",
    "        test_acc_temp = sess.run(accuracy, feed_dict={x: data_test, y: test_lable})\n",
    "        test_acc.append(test_acc_temp)\n",
    "        print(loss_temp,train_acc_temp,test_acc_temp)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": []
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
  
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\nMDdCGejxeFyrV6/WHXfcoTVr1uj222/XG2+8Ue6yAGBWhTLQFyxYoJdffln333+/1q9fr9tuu01t\nbW26+uqr9eCDD2poaKjcJQJAyYUy0KXUuuibN2/WE088of379+vWW2/VSy+9pOuvv14rVqzQLbfc\not27d5e7TAAoGXP3OTtYe3u7d3R0zNnxJksmk9q+fbu2bNmiRx55RMPDw7rooot00003afPmzWps\nbCxbbQCQi5ntdPf2aR8XpUAf7/jx47rvvvu0ZcsW7d69W9XV1br22mu1du1atbS0aNmyZWppacns\nL126VAsWLCh32QAiiECfIXfXrl27tGXLFj366KN68803s64BU1FRoaampgkh39LSopUrV2rt2rVa\nt26d1qxZo8WLF5fhLACEGYFeIHfXyZMn1d3dra6urszl+P3xl4lEYsLzly9frnXr1mnt2rWZoB/b\nH5vwNJv6+vp08OBBDQ4OasWKFWppaVFlZeWsHzef0dFRdXV16dChQ0okEmpqalJzc7OWLl2qhQsX\nluT1T548qZ6eHnV3d+utt97SOeeco7a2NjU1NcnMSnAWhdfW39+v3t5enTp1SmvXrlVVVdWsHOv0\n6dP61a9+pe7ubi1cuFCLFi2asOW6rbq6WosWLZqVmlAaMw308v6fPg+ZmeLxuOLxuM4///xpH3/y\n5Em99tpreu211/Tqq69m9h9//HEdPXp0wmMbGxu1du1arVixIhNqTU1NWbeGhgZVVEz8zPrtt9/W\n0aNHdfDgwZxbb2/vhOdUVFTonHPO0YoVK7Ry5copl2P7jY2NBQWfu+vYsWM6dOjQhO3w4cOZ/SNH\njuRc+bKhoSHzcxh/Of5nMzw8rJ6enkxgT748duyYkslk1tevq6tTa2ur2tra1NbWNmG/ra1NS5Ys\nyXluyWRSfX196uvrU29vb0Fbf3+/xg+a6urqdPnll+vKK6/Uxo0btWHDhoL/wXF3vfLKK3rssce0\ndetWPfnkkxocHCzotdavX69LL71Ul156qS677DJdeOGFtBgDiBH6LDp16pT279+fCfqxy66uLh07\ndkzHjh3L+RXKBQsWaOnSpWpqalJdXZ06Ozt15MiRKROlxr5zP3mrqanR0aNHdeTIkSmX2WbQ1tTU\naPHixaqoqJCZzegymUyqs7NTp0+fnvBaVVVVOvfcc7Vq1aopW319febcx0I62/7w8HDWn0tDQ4OW\n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\nACHx/6F4TI29O7RzAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x195932232b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(loss_train,'k-')\n",
    "plt.title('train loss')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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\ngP4fXIxLkwlGU0cAAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x19593346e48>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.plot(train_acc,'b-',label = 'train_acc')\n",
    "plt.plot(test_acc,'r--',label = 'train_acc')\n",
    "plt.title('train and test accuracy')\n",
    "plt.legend()\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "anaconda-cloud": {},
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.5"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
